import LogicFlow, { LineEdge, LineEdgeModel } from "@logicflow/core";

/**
 * ServerLineModel类继承自LineEdgeModel，用于定义服务器线模型
 * 它根据线的属性设置不同的样式，并定制箭头样式
 */
class ServerLineModel extends LineEdgeModel {
  /**
   * 根据线的类型设置属性
   * 此方法根据properties中的type属性，设置线的颜色
   */
  setAttributes(): void {
    const { properties } = this;

    if (properties.type === "PASS") {
      this.style.stroke = "#54a994";
    } else {
      this.style.stroke = "#ff6263";
    }
  }

  /**
   * 获取箭头样式
   * 此方法根据properties中的useArrow属性，决定是否显示箭头
   * 如果不显示箭头，则将offset和verticalLength设置为0
   * 否则，设置为默认值
   * @returns {LogicFlow.ArrowTheme} 返回定制的箭头样式
   */
  getArrowStyle(): LogicFlow.ArrowTheme {
    const { properties } = this;
    const style = super.getArrowStyle();
    if(!properties.useArrow){
        style.offset = 0
        style.verticalLength = 0
    }else {
        style.offset = 10
        style.verticalLength = 5
    }
    return style
  }
}

// 导出默认对象，定义类型、视图和模型
export default {
    type: "ServerLine", 
    view: LineEdge, 
    model: ServerLineModel,
}